//请求拦截器 http.js
//对http 二次封装
//先对拦截器这一块的处理

//引入store 在store中取token
import store from '@/store/index.js'

// const baseURL = 'http://192.168.1.33:8090' //基地址
const baseURL = 'https://115.29.207.19:8090' //基地址
// const baseURL = 'http://10.63.75.108:8090' //基地址
// const baseURL = 'https://192.168.255.54:8090' //基地址
// const baseURL = 'http://39.105.35.32:8090' //基地址

const httpInterceptor = {
  // 拦截前触发
  invoke(options) {
    // 1. 非 http 开头需拼接地址
    if (!options.url.startsWith('http')) {
      options.url = baseURL + options.url
    }
    // 2. 请求超时
    options.timeout = 10000
    // 3. 添加小程序端请求头标识
    options.header = {
      ...options.header,
      'source-client': 'miniapp',
    }
    // 4. 添加 token 请求头标识
    const token = store.state.member.profile?.token
    if (token) {
      options.header.Authorization = token
    }
  },
}

// 拦截 request 请求
uni.addInterceptor('request',httpInterceptor)
// 拦截 uploadFile 文件上传
uni.addInterceptor('uploadFile', httpInterceptor)

//对外统一提供一个发请求的方法
//uni.request===> 支持promise
//1.业务成功的情况下剥离数据
//2.401
//3.轻提示
//4.fail 轻提示
//http({method:'', url :'', data:{} })
export default function http(options) {
    return new Promise ((resolve,reject)=>{
        uni.request({
            ...options,
            success:(res)=>{
                if(res.statusCode >=200 &&res.statusCode<300) {
                   //业务成功的情况下剥离数据
                    resolve(res.data)
                } else if (res.statusCode === 401) {
                    //401 token 删除
                    store.commit('member/clearProfile')
                    // uni.navigateTo({
                    //     url:''
                    // })
                    reject(res)
                } else {
                    uni.showToast({
                        icon:'none',
                        title: res.data?.msg || '请求错误',
                    })
                     reject(res)
                }
            },
            fail:(err) =>{
               uni.showToast({
               icon: 'none',
               title: '网络错误，换个网络试试',
             })
              reject(err)
            }
        })
    })
}